package com.zhz.leetcode;

/**
 * 258. 各位相加
 * 给定一个非负整数 num，反复将各个位上的数字相加，直到结果为一位数。返回这个结果。
 * <p>
 * 示例 1:
 * 输入: num = 38
 * 输出: 2
 * 解释: 各位相加的过程为：
 * 38 --> 3 + 8 --> 11
 * 11 --> 1 + 1 --> 2
 * 由于2 是一位数，所以返回 2。
 * <p>
 * <p>
 * 示例 1:
 * 输入: num = 0
 * 输出: 0
 * <p>
 * 提示：
 * 0 <= num <= 231- 1
 * <p>
 * 来源：力扣（LeetCode）
 * 链接：https://leetcode-cn.com/problems/add-digits
 * 著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
 */
public class AddDigits258 {

    public static void main(String[] args) {
        AddDigits258 m = new AddDigits258();
        int res = m.addDigits1(10);
        System.out.println(res);
    }

    /**
     * 使用递归操作
     */
    public int addDigits(int num) {
        if (num < 10) {
            return num;
        }
        return addDigits(num % 10 + num / 10);
    }

    /**
     * 使用循环来做
     */
    public int addDigits1(int num) {
        if (num < 10) {
            return num;
        }
        while (num >= 10) {
            num = num % 10 + num / 10;
        }
        return num;
    }


    /**
     * 使用官方解法，不使用循环或迭代
     */
    public int addDigits2(int num) {
        return (num - 1) % 9 + 1;
    }

}
